/**
 * $version:  0.1 
 * $Date: 2012-04-05 
 *
 * Copyright (C) 2010-2012 Jawa Software. All rights reserved.
 *
 */
package org.jawa.core;

/**
 * 版本信息.
 *
 */
public class Version {

	/**
	 * 主版本号(ie 1.x.x).
	 */
	private int major;

	/**
	 * 次版本号 (ie x.1.x).
	 */
	private int minor;

	/**
	 * 修订号 (ie x.x.1).
	 */
	private int micro;

	/**
	 * 该产品的发布状态 (Release, Release Candidate).
	 */
	private ReleaseStatus status;

	/**
	 * 版本字符串信息
	 */
	private String versionString;

	/**
	 * 创建一个新的版本对象.
	 *
	 * @param major 主版本号.
	 * @param minor 次版本号.
	 * @param micro 修订号.
	 * @param status 发布状态.
	 */
	public Version(int major, int minor, int micro, ReleaseStatus status) {
		this.major = major;
		this.minor = minor;
		this.micro = micro;
		this.status = status;
		if (status != null) {
			if (status == ReleaseStatus.Release) {
				versionString = major + "." + minor + "." + micro;
			} else {
				versionString = major + "." + minor + "." + micro + " " + status.toString();
			}
		} else {
			versionString = major + "." + minor + "." + micro;
		}
	}

	/**
	 * 返回当前产品版本的字符串信息 (ie major.minor.revision).
	 *
	 * @return 务器的字符串版本信息
	 */
	public String getVersionString() {
		return versionString;
	}

	/**
	 * 返回产品的发布状态.
	 *
	 * @return 产品的发布状态.
	 */
	public ReleaseStatus getStatus() {
		return status;
	}

	/**
	 * 返回产品的主版本号.
	 *
	 * @return 产品的主版本号  1.x.x
	 */
	public int getMajor() {
		return major;
	}

	/**
	 * 返回产品的次版本号.
	 *
	 * @return 产品的次版本号 x.1.x
	 */
	public int getMinor() {
		return minor;
	}

	/**
	 * 返回产品的修订号.
	 *
	 * @return 产品的修订号  x.x.1
	 */
	public int getMicro() {
		return micro;
	}

	/**
	 * 表达产品的发布状态.
	 */
	public enum ReleaseStatus {
		Release(""), Release_Candidate("RC"), Beta("Beta"), Alpha("Alpha");

		private String status;

		private ReleaseStatus(String status) {
			this.status = status;
		}

		public String toString() {
			return status;
		}
	}
}
